#ifndef __PARSER_H__
#define __PARSER_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Codigos de estado>>
#define OK 0
#define NO_MEM 1
//Codigos de estado<<

typedef struct{
  char** vec_parametros;
  int cant;
  }Parametros;

typedef struct{
  char** tokens;
  int tokensMax;
  Parametros lista_parametros;
  }Parser;


/*
PRE: Recibe una variable del tipo Parser y la inicializa.
POS: Devuelve la variable inicializada.
*/
int parser_New(Parser* parser, Parametros* lista_parametros);

int Crear_lista_parametros (Parametros* lista_parametros);

/*
PRE: recibe un struck del tipo Parametros el cual puede estar inicialisado como no y un parametro a agregar.
POS: Devuelve el struct con el parametro agregado a la lista de parametros e incrementando en uno su cantidad.
*/
int agregar_parametro(Parametros* lista_parametros, char* parametro);

/*Carga un char** con los tokens que estan en parser */
void carga_tokens(Parser parser, char*** tokens  );

/*Devuelve la cantidad maxima de tokens*/
int tokensMax (Parser parser );

/*
PRE: Recibe una variable del tipo Parser con la lista de parametros NO VACIA y la linea a parsear.
POS: Devuelve adentro de parser la linea parseada separada por campos, en la lista de tokens y su cantidad.
*/
int Parsear (Parser* parser, void* lineaInput);

/*
PRE: Recibe una lista de parametros NO VACIA.
POS: Libera la memoria allocada por esa lista de parametros.
*/
int limpiar_lista_parametros(Parametros* lista_parametros);

/*
PRE: Recibe una lista de tokens NO VACIA.
POS: Libera la memoria allocada por esa lista de tokens.
*/
int limpiar_lista_tokens(char** tokens,int tokensMax);

/*
PRE: Recibe una variable del tipo Parser, con una lista de tokens y parametros NO VACIAS.
POS: Libera la memoria allocada por esas listas guadadas dentro del parser.
*/
int parser_Destruir(Parser* parser);



#endif /* __PARSER_H__ */
